﻿#ifndef MATHS_H
#define MATHS_H

//include定義
#include "Common.h"

//Define定義
#define PI 3.141592653589793
#define RADIAN_TO_DEGREE(radian)	(radian * 180.0 / PI)
#define DEGREE_TO_RADIAN(degree)	(degree * PI / 180.0)

class Math
{

public:
	//コンストラクタ
	Math();

	//デストラクタ
	~Math();

	/*-------------------------------------------------------------------------------
	*	関数説明
	*	　ベクトルの長さを求める
	*	引数
	*	　p_Vector		：[I/ ]　ベクトル
	*	戻り値
	*	　正常終了		：ベクトルの長さ
	*-------------------------------------------------------------------------------*/
	static float Length(const vec3 &p_Vector);

	/*-------------------------------------------------------------------------------
	*	関数説明
	*	　ベクトルを正規化する
	*	引数
	*	　p_Vector		：[I/ ]　ベクトル
	*	戻り値
	*	　正常終了		：正規化されたベクトル
	*	　異常終了		：全要素[0.0]
	*-------------------------------------------------------------------------------*/
	static vec3 Normalize(const vec3 &p_Vector);

	/*-------------------------------------------------------------------------------
	*	関数説明
	*	　ベクトルの内積を求める
	*	引数
	*	　p_Vector1		：[I/ ]　ベクトル1
	*	　p_Vector2		：[I/ ]　ベクトル2
	*	戻り値
	*	　正常終了		：内積
	*-------------------------------------------------------------------------------*/
	static float Dot(const vec3 &p_Vector1, const vec3 &p_Vector2);

	/*-------------------------------------------------------------------------------
	*	関数説明
	*	　ベクトルの外積を求める
	*	引数
	*	　p_Vector1		：[I/ ]　ベクトル1
	*	　p_Vector2		：[I/ ]　ベクトル2
	*	戻り値
	*	　正常終了		：外積
	*-------------------------------------------------------------------------------*/
	static vec3 Cross(const vec3 &p_Vector1, const vec3 &p_Vector2);

	/*-------------------------------------------------------------------------------
	*	関数説明
	*	　3要素の頂点で作られたポリゴンから法線を計算する
	*	引数
	*	　p_Vector1		：[I/ ]　ベクトル1
	*	　p_Vector2		：[I/ ]　ベクトル2
	*	　p_Vector3		：[I/ ]　ベクトル3
	*	　※下図のように反時計回りのベクトルで入力してください（正の値が取れます）
	*				 １
	*				／＼
	*			　／　　＼
	*			／　　　　＼
	*		　２￣￣￣￣￣￣３
	*	戻り値
	*	　正常終了		：正規化されたベクトル
	*	　異常終了		：全要素[0.0]
	*-------------------------------------------------------------------------------*/
	static vec3 Normal(const vec3 &p_Vector1, const vec3 &p_Vector2, const vec3 &p_Vector3);

private:


};
#endif